/*
 * Copyright (c) 2025 Huawei Device Co., Ltd.
 * Licensed under the Apache License, Version 2.0 (the "License"),
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

/**
 * @addtogroup TeeTrusted
 * @{
 *
 * @brief TEE（Trusted Excution Environment）可信执行环境API。
 *
 * 提供安全能力API，例如可信存储、加解密及可信时间等，用于可信应用程序开发。
 *
 * @since 20
 */

/**
 * @file dstb_api.h
 *
 * @brief 提供分布式TEE服务相关的API。
 *
 * @library NA
 * @kit TEEKit
 * @include <TEEKit/dstb_api.h>
 * @syscap SystemCapability.Tee.TeeClient
 * @since 20
 */

#ifndef DSTB_API_H
#define DSTB_API_H

#include <stdint.h>
#include <tee_defines.h>

#ifdef __cplusplus
extern "C" {
#endif

/**
 * @brief 枚举设备ID类型。
 * @since 20
 */
enum devid_type {
    /** 网络ID。 */
    DEVID_NETID = 0,
    /** 设备ID。 */
    DEVID_UDID = 1,
};

/**
 * @brief 定义设备信息。
 * @since 20
 */
struct device_info {
    /** 设备ID类型枚举变量。 */
    enum devid_type devid_type;
    /** 设备ID值。 */
    char *devid;
};

/**
 * @brief 枚举协商条件类型。
 * @since 20
 */
enum nego_condition {
    /** 检查本地是否有对端记录，若无则发起协商。 */
    CHECK_LOCAL = 0,
    /** 检查本地和对端是否互相有记录，若无则发起协商。 */
    CHECK_BOTH = 1,
    /** 无条件发起协商。 */
    NO_CHECK = 2,
};

/**
 * @brief 通过分布式TEE生成共享密钥。
 *
 * @param devid_info [OUT]对端设备ID，可以是网络ID或设备ID。
 * @param salt [IN]随机盐值，如果调用者希望生成相同的共享密钥，需与对端一致。
 * @param salt_len [IN]盐值缓冲区的长度。
 * @param info [IN]生成共享密钥的附加信息，如果调用者希望生成相同的共享密钥，需与对端一致。
 * @param info_len [IN]附加信息缓冲区的长度。
 * @param key [OUT]生成的密钥结果。
 * @param key_len [IN]密钥结果的长度。
 * @return TEE_SUCCESS：操作成功。\n
 *         否则返回其他信息。
 * @since 20
 */
TEE_Result tee_dstb_gen_sharekey(struct device_info *devid_info, const uint8_t *salt, uint32_t salt_len,
    const uint8_t *info, uint32_t info_len, uint8_t *key, uint32_t key_len);

/**
 * @brief 分布式TEE服务的预协商接口。
 *
 * @param devid_info [OUT]对端设备ID，可以是网络ID或设备ID。
 * @param cond [IN]预协商条件。
 * @return TEE_SUCCESS：操作成功。\n
 *         否则返回其他信息。
 * @since 20
 */
TEE_Result tee_dstb_pre_attestation(struct device_info *devid_info, enum nego_condition cond);

#ifdef __cplusplus
}
#endif
/** @} */
#endif